package com.itheima.apis.book;

import com.itheima.apis.book.fallback.IBookClientFallBack;
import com.itheima.model.book.dtos.BookAdminDto;
import com.itheima.model.book.dtos.BookSaveDto;
import com.itheima.model.common.dtos.ResponseResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@FeignClient(value = "book-service", contextId = "iBookClient", fallback = IBookClientFallBack.class)
public interface IBookClient {
    /**
     * 获取图书详情VO
     */
    @GetMapping("/api/v1/book/vo")
    ResponseResult getBookVo(@RequestParam Integer bookId);

    /**
     * 根据分类ID获取图书列表
     */
    @GetMapping("/api/v1/book/category")
    ResponseResult getBooksByCategory(@RequestParam Integer categoryId, 
                                     @RequestParam Integer page, 
                                     @RequestParam Integer size);

    /**
     * 获取新书列表
     */
    @GetMapping("/api/v1/book/new")
    ResponseResult getNewBooks(@RequestParam Integer page, 
                               @RequestParam Integer size);

    // ==================== 管理端接口 ====================
    
    /**
     * 分页查询图书列表（管理端）
     */
    @PostMapping("/api/v1/book/admin/list")
    ResponseResult adminListBooks(@RequestBody BookAdminDto dto);

    /**
     * 获取图书详情（管理端）
     */
    @GetMapping("/api/v1/book/admin/{id}")
    ResponseResult adminGetBookById(@PathVariable("id") Integer id);

    /**
     * 新增图书（管理端）
     */
    @PostMapping("/api/v1/book/admin")
    ResponseResult adminAddBook(@RequestBody BookSaveDto dto);

    /**
     * 更新图书（管理端）
     */
    @PutMapping("/api/v1/book/admin/{id}")
    ResponseResult adminUpdateBook(@PathVariable("id") Integer id, @RequestBody BookSaveDto dto);

    /**
     * 删除图书（管理端）
     */
    @DeleteMapping("/api/v1/book/admin/{id}")
    ResponseResult adminDeleteBook(@PathVariable("id") Integer id);

    /**
     * 批量删除图书（管理端）
     */
    @PostMapping("/api/v1/book/admin/batch-delete")
    ResponseResult adminBatchDeleteBooks(@RequestBody List<Integer> ids);
}
